package at.ac.tuwien.big.me12.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import at.ac.tuwien.big.me12.services.GSMLDslGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalGSMLDslParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'course'", "'{'", "'}'", "'semester'", "'grading scheme'", "'('", "')'", "'min'", "':'", "';'", "'@all'", "'-'", "'%'", "'point(s)'"
    };
    public static final int RULE_ID=5;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__19=19;
    public static final int RULE_STRING=4;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalGSMLDslParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalGSMLDslParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalGSMLDslParser.tokenNames; }
    public String getGrammarFileName() { return "../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g"; }



     	private GSMLDslGrammarAccess grammarAccess;
     	
        public InternalGSMLDslParser(TokenStream input, GSMLDslGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "GradingSystem";	
       	}
       	
       	@Override
       	protected GSMLDslGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleGradingSystem"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:68:1: entryRuleGradingSystem returns [EObject current=null] : iv_ruleGradingSystem= ruleGradingSystem EOF ;
    public final EObject entryRuleGradingSystem() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGradingSystem = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:69:2: (iv_ruleGradingSystem= ruleGradingSystem EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:70:2: iv_ruleGradingSystem= ruleGradingSystem EOF
            {
             newCompositeNode(grammarAccess.getGradingSystemRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleGradingSystem_in_entryRuleGradingSystem75);
            iv_ruleGradingSystem=ruleGradingSystem();

            state._fsp--;

             current =iv_ruleGradingSystem; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleGradingSystem85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGradingSystem"


    // $ANTLR start "ruleGradingSystem"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:77:1: ruleGradingSystem returns [EObject current=null] : ( () ( (lv_courses_1_0= ruleCourse ) )+ ) ;
    public final EObject ruleGradingSystem() throws RecognitionException {
        EObject current = null;

        EObject lv_courses_1_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:80:28: ( ( () ( (lv_courses_1_0= ruleCourse ) )+ ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:81:1: ( () ( (lv_courses_1_0= ruleCourse ) )+ )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:81:1: ( () ( (lv_courses_1_0= ruleCourse ) )+ )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:81:2: () ( (lv_courses_1_0= ruleCourse ) )+
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:81:2: ()
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:82:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getGradingSystemAccess().getGradingSystemAction_0(),
                        current);
                

            }

            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:87:2: ( (lv_courses_1_0= ruleCourse ) )+
            int cnt1=0;
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==11) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:88:1: (lv_courses_1_0= ruleCourse )
            	    {
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:88:1: (lv_courses_1_0= ruleCourse )
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:89:3: lv_courses_1_0= ruleCourse
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getGradingSystemAccess().getCoursesCourseParserRuleCall_1_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleCourse_in_ruleGradingSystem140);
            	    lv_courses_1_0=ruleCourse();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getGradingSystemRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"courses",
            	            		lv_courses_1_0, 
            	            		"Course");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt1 >= 1 ) break loop1;
                        EarlyExitException eee =
                            new EarlyExitException(1, input);
                        throw eee;
                }
                cnt1++;
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGradingSystem"


    // $ANTLR start "entryRuleTask"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:113:1: entryRuleTask returns [EObject current=null] : iv_ruleTask= ruleTask EOF ;
    public final EObject entryRuleTask() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTask = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:114:2: (iv_ruleTask= ruleTask EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:115:2: iv_ruleTask= ruleTask EOF
            {
             newCompositeNode(grammarAccess.getTaskRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleTask_in_entryRuleTask177);
            iv_ruleTask=ruleTask();

            state._fsp--;

             current =iv_ruleTask; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTask187); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTask"


    // $ANTLR start "ruleTask"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:122:1: ruleTask returns [EObject current=null] : (this_ConcreteTask_0= ruleConcreteTask | this_TaskGroup_1= ruleTaskGroup ) ;
    public final EObject ruleTask() throws RecognitionException {
        EObject current = null;

        EObject this_ConcreteTask_0 = null;

        EObject this_TaskGroup_1 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:125:28: ( (this_ConcreteTask_0= ruleConcreteTask | this_TaskGroup_1= ruleTaskGroup ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:126:1: (this_ConcreteTask_0= ruleConcreteTask | this_TaskGroup_1= ruleTaskGroup )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:126:1: (this_ConcreteTask_0= ruleConcreteTask | this_TaskGroup_1= ruleTaskGroup )
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==RULE_STRING) ) {
                int LA2_1 = input.LA(2);

                if ( (LA2_1==16) ) {
                    alt2=1;
                }
                else if ( (LA2_1==12) ) {
                    alt2=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 1, input);

                    throw nvae;
                }
            }
            else if ( (LA2_0==RULE_ID) ) {
                int LA2_2 = input.LA(2);

                if ( (LA2_2==16) ) {
                    alt2=1;
                }
                else if ( (LA2_2==12) ) {
                    alt2=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 2, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;
            }
            switch (alt2) {
                case 1 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:127:5: this_ConcreteTask_0= ruleConcreteTask
                    {
                     
                            newCompositeNode(grammarAccess.getTaskAccess().getConcreteTaskParserRuleCall_0()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleConcreteTask_in_ruleTask234);
                    this_ConcreteTask_0=ruleConcreteTask();

                    state._fsp--;

                     
                            current = this_ConcreteTask_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:137:5: this_TaskGroup_1= ruleTaskGroup
                    {
                     
                            newCompositeNode(grammarAccess.getTaskAccess().getTaskGroupParserRuleCall_1()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleTaskGroup_in_ruleTask261);
                    this_TaskGroup_1=ruleTaskGroup();

                    state._fsp--;

                     
                            current = this_TaskGroup_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTask"


    // $ANTLR start "entryRuleCourse"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:153:1: entryRuleCourse returns [EObject current=null] : iv_ruleCourse= ruleCourse EOF ;
    public final EObject entryRuleCourse() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCourse = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:154:2: (iv_ruleCourse= ruleCourse EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:155:2: iv_ruleCourse= ruleCourse EOF
            {
             newCompositeNode(grammarAccess.getCourseRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleCourse_in_entryRuleCourse296);
            iv_ruleCourse=ruleCourse();

            state._fsp--;

             current =iv_ruleCourse; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCourse306); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCourse"


    // $ANTLR start "ruleCourse"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:162:1: ruleCourse returns [EObject current=null] : ( () otherlv_1= 'course' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradings_4_0= ruleGrading ) )+ otherlv_5= '}' ) ;
    public final EObject ruleCourse() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        AntlrDatatypeRuleToken lv_name_2_0 = null;

        EObject lv_gradings_4_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:165:28: ( ( () otherlv_1= 'course' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradings_4_0= ruleGrading ) )+ otherlv_5= '}' ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:166:1: ( () otherlv_1= 'course' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradings_4_0= ruleGrading ) )+ otherlv_5= '}' )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:166:1: ( () otherlv_1= 'course' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradings_4_0= ruleGrading ) )+ otherlv_5= '}' )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:166:2: () otherlv_1= 'course' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradings_4_0= ruleGrading ) )+ otherlv_5= '}'
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:166:2: ()
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:167:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getCourseAccess().getCourseAction_0(),
                        current);
                

            }

            otherlv_1=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleCourse352); 

                	newLeafNode(otherlv_1, grammarAccess.getCourseAccess().getCourseKeyword_1());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:176:1: ( (lv_name_2_0= ruleEString ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:177:1: (lv_name_2_0= ruleEString )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:177:1: (lv_name_2_0= ruleEString )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:178:3: lv_name_2_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getCourseAccess().getNameEStringParserRuleCall_2_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCourse373);
            lv_name_2_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getCourseRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_2_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_3=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleCourse385); 

                	newLeafNode(otherlv_3, grammarAccess.getCourseAccess().getLeftCurlyBracketKeyword_3());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:198:1: ( (lv_gradings_4_0= ruleGrading ) )+
            int cnt3=0;
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==14) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:199:1: (lv_gradings_4_0= ruleGrading )
            	    {
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:199:1: (lv_gradings_4_0= ruleGrading )
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:200:3: lv_gradings_4_0= ruleGrading
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getCourseAccess().getGradingsGradingParserRuleCall_4_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleGrading_in_ruleCourse406);
            	    lv_gradings_4_0=ruleGrading();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getCourseRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"gradings",
            	            		lv_gradings_4_0, 
            	            		"Grading");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt3 >= 1 ) break loop3;
                        EarlyExitException eee =
                            new EarlyExitException(3, input);
                        throw eee;
                }
                cnt3++;
            } while (true);

            otherlv_5=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleCourse419); 

                	newLeafNode(otherlv_5, grammarAccess.getCourseAccess().getRightCurlyBracketKeyword_5());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCourse"


    // $ANTLR start "entryRuleEString"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:228:1: entryRuleEString returns [String current=null] : iv_ruleEString= ruleEString EOF ;
    public final String entryRuleEString() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEString = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:229:2: (iv_ruleEString= ruleEString EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:230:2: iv_ruleEString= ruleEString EOF
            {
             newCompositeNode(grammarAccess.getEStringRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_entryRuleEString456);
            iv_ruleEString=ruleEString();

            state._fsp--;

             current =iv_ruleEString.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEString467); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEString"


    // $ANTLR start "ruleEString"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:237:1: ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) ;
    public final AntlrDatatypeRuleToken ruleEString() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_STRING_0=null;
        Token this_ID_1=null;

         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:240:28: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:241:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:241:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==RULE_STRING) ) {
                alt4=1;
            }
            else if ( (LA4_0==RULE_ID) ) {
                alt4=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:241:6: this_STRING_0= RULE_STRING
                    {
                    this_STRING_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleEString507); 

                    		current.merge(this_STRING_0);
                        
                     
                        newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:249:10: this_ID_1= RULE_ID
                    {
                    this_ID_1=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEString533); 

                    		current.merge(this_ID_1);
                        
                     
                        newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEString"


    // $ANTLR start "entryRuleGrading"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:264:1: entryRuleGrading returns [EObject current=null] : iv_ruleGrading= ruleGrading EOF ;
    public final EObject entryRuleGrading() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGrading = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:265:2: (iv_ruleGrading= ruleGrading EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:266:2: iv_ruleGrading= ruleGrading EOF
            {
             newCompositeNode(grammarAccess.getGradingRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleGrading_in_entryRuleGrading578);
            iv_ruleGrading=ruleGrading();

            state._fsp--;

             current =iv_ruleGrading; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleGrading588); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGrading"


    // $ANTLR start "ruleGrading"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:273:1: ruleGrading returns [EObject current=null] : ( () otherlv_1= 'semester' ( (lv_semester_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradingScheme_4_0= ruleGradingScheme ) ) ( (lv_tasks_5_0= ruleTask ) )+ otherlv_6= '}' ) ;
    public final EObject ruleGrading() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_6=null;
        AntlrDatatypeRuleToken lv_semester_2_0 = null;

        EObject lv_gradingScheme_4_0 = null;

        EObject lv_tasks_5_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:276:28: ( ( () otherlv_1= 'semester' ( (lv_semester_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradingScheme_4_0= ruleGradingScheme ) ) ( (lv_tasks_5_0= ruleTask ) )+ otherlv_6= '}' ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:277:1: ( () otherlv_1= 'semester' ( (lv_semester_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradingScheme_4_0= ruleGradingScheme ) ) ( (lv_tasks_5_0= ruleTask ) )+ otherlv_6= '}' )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:277:1: ( () otherlv_1= 'semester' ( (lv_semester_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradingScheme_4_0= ruleGradingScheme ) ) ( (lv_tasks_5_0= ruleTask ) )+ otherlv_6= '}' )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:277:2: () otherlv_1= 'semester' ( (lv_semester_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_gradingScheme_4_0= ruleGradingScheme ) ) ( (lv_tasks_5_0= ruleTask ) )+ otherlv_6= '}'
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:277:2: ()
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:278:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getGradingAccess().getGradingAction_0(),
                        current);
                

            }

            otherlv_1=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleGrading634); 

                	newLeafNode(otherlv_1, grammarAccess.getGradingAccess().getSemesterKeyword_1());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:287:1: ( (lv_semester_2_0= ruleEString ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:288:1: (lv_semester_2_0= ruleEString )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:288:1: (lv_semester_2_0= ruleEString )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:289:3: lv_semester_2_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getGradingAccess().getSemesterEStringParserRuleCall_2_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleGrading655);
            lv_semester_2_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getGradingRule());
            	        }
                   		set(
                   			current, 
                   			"semester",
                    		lv_semester_2_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_3=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleGrading667); 

                	newLeafNode(otherlv_3, grammarAccess.getGradingAccess().getLeftCurlyBracketKeyword_3());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:309:1: ( (lv_gradingScheme_4_0= ruleGradingScheme ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:310:1: (lv_gradingScheme_4_0= ruleGradingScheme )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:310:1: (lv_gradingScheme_4_0= ruleGradingScheme )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:311:3: lv_gradingScheme_4_0= ruleGradingScheme
            {
             
            	        newCompositeNode(grammarAccess.getGradingAccess().getGradingSchemeGradingSchemeParserRuleCall_4_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleGradingScheme_in_ruleGrading688);
            lv_gradingScheme_4_0=ruleGradingScheme();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getGradingRule());
            	        }
                   		set(
                   			current, 
                   			"gradingScheme",
                    		lv_gradingScheme_4_0, 
                    		"GradingScheme");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:327:2: ( (lv_tasks_5_0= ruleTask ) )+
            int cnt5=0;
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( ((LA5_0>=RULE_STRING && LA5_0<=RULE_ID)) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:328:1: (lv_tasks_5_0= ruleTask )
            	    {
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:328:1: (lv_tasks_5_0= ruleTask )
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:329:3: lv_tasks_5_0= ruleTask
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getGradingAccess().getTasksTaskParserRuleCall_5_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleTask_in_ruleGrading709);
            	    lv_tasks_5_0=ruleTask();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getGradingRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"tasks",
            	            		lv_tasks_5_0, 
            	            		"Task");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt5 >= 1 ) break loop5;
                        EarlyExitException eee =
                            new EarlyExitException(5, input);
                        throw eee;
                }
                cnt5++;
            } while (true);

            otherlv_6=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleGrading722); 

                	newLeafNode(otherlv_6, grammarAccess.getGradingAccess().getRightCurlyBracketKeyword_6());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGrading"


    // $ANTLR start "entryRuleGradingScheme"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:357:1: entryRuleGradingScheme returns [EObject current=null] : iv_ruleGradingScheme= ruleGradingScheme EOF ;
    public final EObject entryRuleGradingScheme() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGradingScheme = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:358:2: (iv_ruleGradingScheme= ruleGradingScheme EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:359:2: iv_ruleGradingScheme= ruleGradingScheme EOF
            {
             newCompositeNode(grammarAccess.getGradingSchemeRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleGradingScheme_in_entryRuleGradingScheme758);
            iv_ruleGradingScheme=ruleGradingScheme();

            state._fsp--;

             current =iv_ruleGradingScheme; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleGradingScheme768); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGradingScheme"


    // $ANTLR start "ruleGradingScheme"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:366:1: ruleGradingScheme returns [EObject current=null] : ( () otherlv_1= 'grading scheme' otherlv_2= '(' ( ( ruleEString ) ) otherlv_4= ')' otherlv_5= '{' ( (lv_grades_6_0= ruleGrade ) )+ otherlv_7= '}' ) ;
    public final EObject ruleGradingScheme() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_grades_6_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:369:28: ( ( () otherlv_1= 'grading scheme' otherlv_2= '(' ( ( ruleEString ) ) otherlv_4= ')' otherlv_5= '{' ( (lv_grades_6_0= ruleGrade ) )+ otherlv_7= '}' ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:370:1: ( () otherlv_1= 'grading scheme' otherlv_2= '(' ( ( ruleEString ) ) otherlv_4= ')' otherlv_5= '{' ( (lv_grades_6_0= ruleGrade ) )+ otherlv_7= '}' )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:370:1: ( () otherlv_1= 'grading scheme' otherlv_2= '(' ( ( ruleEString ) ) otherlv_4= ')' otherlv_5= '{' ( (lv_grades_6_0= ruleGrade ) )+ otherlv_7= '}' )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:370:2: () otherlv_1= 'grading scheme' otherlv_2= '(' ( ( ruleEString ) ) otherlv_4= ')' otherlv_5= '{' ( (lv_grades_6_0= ruleGrade ) )+ otherlv_7= '}'
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:370:2: ()
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:371:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getGradingSchemeAccess().getGradingSchemeAction_0(),
                        current);
                

            }

            otherlv_1=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleGradingScheme814); 

                	newLeafNode(otherlv_1, grammarAccess.getGradingSchemeAccess().getGradingSchemeKeyword_1());
                
            otherlv_2=(Token)match(input,16,FollowSets000.FOLLOW_16_in_ruleGradingScheme826); 

                	newLeafNode(otherlv_2, grammarAccess.getGradingSchemeAccess().getLeftParenthesisKeyword_2());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:384:1: ( ( ruleEString ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:385:1: ( ruleEString )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:385:1: ( ruleEString )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:386:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getGradingSchemeRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getGradingSchemeAccess().getMinRequirementNotFulfilledGradeGradeCrossReference_3_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleGradingScheme849);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,17,FollowSets000.FOLLOW_17_in_ruleGradingScheme861); 

                	newLeafNode(otherlv_4, grammarAccess.getGradingSchemeAccess().getRightParenthesisKeyword_4());
                
            otherlv_5=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleGradingScheme873); 

                	newLeafNode(otherlv_5, grammarAccess.getGradingSchemeAccess().getLeftCurlyBracketKeyword_5());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:407:1: ( (lv_grades_6_0= ruleGrade ) )+
            int cnt6=0;
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( ((LA6_0>=RULE_STRING && LA6_0<=RULE_ID)) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:408:1: (lv_grades_6_0= ruleGrade )
            	    {
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:408:1: (lv_grades_6_0= ruleGrade )
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:409:3: lv_grades_6_0= ruleGrade
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getGradingSchemeAccess().getGradesGradeParserRuleCall_6_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleGrade_in_ruleGradingScheme894);
            	    lv_grades_6_0=ruleGrade();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getGradingSchemeRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"grades",
            	            		lv_grades_6_0, 
            	            		"Grade");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt6 >= 1 ) break loop6;
                        EarlyExitException eee =
                            new EarlyExitException(6, input);
                        throw eee;
                }
                cnt6++;
            } while (true);

            otherlv_7=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleGradingScheme907); 

                	newLeafNode(otherlv_7, grammarAccess.getGradingSchemeAccess().getRightCurlyBracketKeyword_7());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGradingScheme"


    // $ANTLR start "entryRuleMinRequirement"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:437:1: entryRuleMinRequirement returns [EObject current=null] : iv_ruleMinRequirement= ruleMinRequirement EOF ;
    public final EObject entryRuleMinRequirement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMinRequirement = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:438:2: (iv_ruleMinRequirement= ruleMinRequirement EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:439:2: iv_ruleMinRequirement= ruleMinRequirement EOF
            {
             newCompositeNode(grammarAccess.getMinRequirementRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleMinRequirement_in_entryRuleMinRequirement943);
            iv_ruleMinRequirement=ruleMinRequirement();

            state._fsp--;

             current =iv_ruleMinRequirement; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMinRequirement953); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMinRequirement"


    // $ANTLR start "ruleMinRequirement"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:446:1: ruleMinRequirement returns [EObject current=null] : ( () otherlv_1= 'min' ( (lv_value_2_0= ruleEInt ) ) ( (lv_type_3_0= ruleMinRequirementsType ) ) ) ;
    public final EObject ruleMinRequirement() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        AntlrDatatypeRuleToken lv_value_2_0 = null;

        Enumerator lv_type_3_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:449:28: ( ( () otherlv_1= 'min' ( (lv_value_2_0= ruleEInt ) ) ( (lv_type_3_0= ruleMinRequirementsType ) ) ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:450:1: ( () otherlv_1= 'min' ( (lv_value_2_0= ruleEInt ) ) ( (lv_type_3_0= ruleMinRequirementsType ) ) )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:450:1: ( () otherlv_1= 'min' ( (lv_value_2_0= ruleEInt ) ) ( (lv_type_3_0= ruleMinRequirementsType ) ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:450:2: () otherlv_1= 'min' ( (lv_value_2_0= ruleEInt ) ) ( (lv_type_3_0= ruleMinRequirementsType ) )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:450:2: ()
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:451:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getMinRequirementAccess().getMinRequirementAction_0(),
                        current);
                

            }

            otherlv_1=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleMinRequirement999); 

                	newLeafNode(otherlv_1, grammarAccess.getMinRequirementAccess().getMinKeyword_1());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:460:1: ( (lv_value_2_0= ruleEInt ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:461:1: (lv_value_2_0= ruleEInt )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:461:1: (lv_value_2_0= ruleEInt )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:462:3: lv_value_2_0= ruleEInt
            {
             
            	        newCompositeNode(grammarAccess.getMinRequirementAccess().getValueEIntParserRuleCall_2_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEInt_in_ruleMinRequirement1020);
            lv_value_2_0=ruleEInt();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getMinRequirementRule());
            	        }
                   		set(
                   			current, 
                   			"value",
                    		lv_value_2_0, 
                    		"EInt");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:478:2: ( (lv_type_3_0= ruleMinRequirementsType ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:479:1: (lv_type_3_0= ruleMinRequirementsType )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:479:1: (lv_type_3_0= ruleMinRequirementsType )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:480:3: lv_type_3_0= ruleMinRequirementsType
            {
             
            	        newCompositeNode(grammarAccess.getMinRequirementAccess().getTypeMinRequirementsTypeEnumRuleCall_3_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleMinRequirementsType_in_ruleMinRequirement1041);
            lv_type_3_0=ruleMinRequirementsType();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getMinRequirementRule());
            	        }
                   		set(
                   			current, 
                   			"type",
                    		lv_type_3_0, 
                    		"MinRequirementsType");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMinRequirement"


    // $ANTLR start "entryRuleConcreteTask"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:504:1: entryRuleConcreteTask returns [EObject current=null] : iv_ruleConcreteTask= ruleConcreteTask EOF ;
    public final EObject entryRuleConcreteTask() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConcreteTask = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:505:2: (iv_ruleConcreteTask= ruleConcreteTask EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:506:2: iv_ruleConcreteTask= ruleConcreteTask EOF
            {
             newCompositeNode(grammarAccess.getConcreteTaskRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleConcreteTask_in_entryRuleConcreteTask1077);
            iv_ruleConcreteTask=ruleConcreteTask();

            state._fsp--;

             current =iv_ruleConcreteTask; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleConcreteTask1087); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConcreteTask"


    // $ANTLR start "ruleConcreteTask"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:513:1: ruleConcreteTask returns [EObject current=null] : ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= '(' ( (lv_maxPoints_3_0= ruleEInt ) ) otherlv_4= ')' (otherlv_5= ':' ( (lv_minRequirement_6_0= ruleMinRequirement ) ) )? otherlv_7= ';' ) ;
    public final EObject ruleConcreteTask() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        AntlrDatatypeRuleToken lv_maxPoints_3_0 = null;

        EObject lv_minRequirement_6_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:516:28: ( ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= '(' ( (lv_maxPoints_3_0= ruleEInt ) ) otherlv_4= ')' (otherlv_5= ':' ( (lv_minRequirement_6_0= ruleMinRequirement ) ) )? otherlv_7= ';' ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:517:1: ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= '(' ( (lv_maxPoints_3_0= ruleEInt ) ) otherlv_4= ')' (otherlv_5= ':' ( (lv_minRequirement_6_0= ruleMinRequirement ) ) )? otherlv_7= ';' )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:517:1: ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= '(' ( (lv_maxPoints_3_0= ruleEInt ) ) otherlv_4= ')' (otherlv_5= ':' ( (lv_minRequirement_6_0= ruleMinRequirement ) ) )? otherlv_7= ';' )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:517:2: () ( (lv_name_1_0= ruleEString ) ) otherlv_2= '(' ( (lv_maxPoints_3_0= ruleEInt ) ) otherlv_4= ')' (otherlv_5= ':' ( (lv_minRequirement_6_0= ruleMinRequirement ) ) )? otherlv_7= ';'
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:517:2: ()
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:518:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getConcreteTaskAccess().getConcreteTaskAction_0(),
                        current);
                

            }

            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:523:2: ( (lv_name_1_0= ruleEString ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:524:1: (lv_name_1_0= ruleEString )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:524:1: (lv_name_1_0= ruleEString )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:525:3: lv_name_1_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getConcreteTaskAccess().getNameEStringParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleConcreteTask1142);
            lv_name_1_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getConcreteTaskRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,16,FollowSets000.FOLLOW_16_in_ruleConcreteTask1154); 

                	newLeafNode(otherlv_2, grammarAccess.getConcreteTaskAccess().getLeftParenthesisKeyword_2());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:545:1: ( (lv_maxPoints_3_0= ruleEInt ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:546:1: (lv_maxPoints_3_0= ruleEInt )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:546:1: (lv_maxPoints_3_0= ruleEInt )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:547:3: lv_maxPoints_3_0= ruleEInt
            {
             
            	        newCompositeNode(grammarAccess.getConcreteTaskAccess().getMaxPointsEIntParserRuleCall_3_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEInt_in_ruleConcreteTask1175);
            lv_maxPoints_3_0=ruleEInt();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getConcreteTaskRule());
            	        }
                   		set(
                   			current, 
                   			"maxPoints",
                    		lv_maxPoints_3_0, 
                    		"EInt");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,17,FollowSets000.FOLLOW_17_in_ruleConcreteTask1187); 

                	newLeafNode(otherlv_4, grammarAccess.getConcreteTaskAccess().getRightParenthesisKeyword_4());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:567:1: (otherlv_5= ':' ( (lv_minRequirement_6_0= ruleMinRequirement ) ) )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==19) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:567:3: otherlv_5= ':' ( (lv_minRequirement_6_0= ruleMinRequirement ) )
                    {
                    otherlv_5=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleConcreteTask1200); 

                        	newLeafNode(otherlv_5, grammarAccess.getConcreteTaskAccess().getColonKeyword_5_0());
                        
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:571:1: ( (lv_minRequirement_6_0= ruleMinRequirement ) )
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:572:1: (lv_minRequirement_6_0= ruleMinRequirement )
                    {
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:572:1: (lv_minRequirement_6_0= ruleMinRequirement )
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:573:3: lv_minRequirement_6_0= ruleMinRequirement
                    {
                     
                    	        newCompositeNode(grammarAccess.getConcreteTaskAccess().getMinRequirementMinRequirementParserRuleCall_5_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleMinRequirement_in_ruleConcreteTask1221);
                    lv_minRequirement_6_0=ruleMinRequirement();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getConcreteTaskRule());
                    	        }
                           		set(
                           			current, 
                           			"minRequirement",
                            		lv_minRequirement_6_0, 
                            		"MinRequirement");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;

            }

            otherlv_7=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleConcreteTask1235); 

                	newLeafNode(otherlv_7, grammarAccess.getConcreteTaskAccess().getSemicolonKeyword_6());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConcreteTask"


    // $ANTLR start "entryRuleTaskGroup"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:601:1: entryRuleTaskGroup returns [EObject current=null] : iv_ruleTaskGroup= ruleTaskGroup EOF ;
    public final EObject entryRuleTaskGroup() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTaskGroup = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:602:2: (iv_ruleTaskGroup= ruleTaskGroup EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:603:2: iv_ruleTaskGroup= ruleTaskGroup EOF
            {
             newCompositeNode(grammarAccess.getTaskGroupRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleTaskGroup_in_entryRuleTaskGroup1271);
            iv_ruleTaskGroup=ruleTaskGroup();

            state._fsp--;

             current =iv_ruleTaskGroup; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleTaskGroup1281); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTaskGroup"


    // $ANTLR start "ruleTaskGroup"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:610:1: ruleTaskGroup returns [EObject current=null] : ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' ( (lv_contains_2_0= ruleTask ) )+ (otherlv_3= '@all' otherlv_4= ':' ( (lv_minRequirement_5_0= ruleMinRequirement ) ) otherlv_6= ';' )? otherlv_7= '}' ) ;
    public final EObject ruleTaskGroup() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        AntlrDatatypeRuleToken lv_name_0_0 = null;

        EObject lv_contains_2_0 = null;

        EObject lv_minRequirement_5_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:613:28: ( ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' ( (lv_contains_2_0= ruleTask ) )+ (otherlv_3= '@all' otherlv_4= ':' ( (lv_minRequirement_5_0= ruleMinRequirement ) ) otherlv_6= ';' )? otherlv_7= '}' ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:614:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' ( (lv_contains_2_0= ruleTask ) )+ (otherlv_3= '@all' otherlv_4= ':' ( (lv_minRequirement_5_0= ruleMinRequirement ) ) otherlv_6= ';' )? otherlv_7= '}' )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:614:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' ( (lv_contains_2_0= ruleTask ) )+ (otherlv_3= '@all' otherlv_4= ':' ( (lv_minRequirement_5_0= ruleMinRequirement ) ) otherlv_6= ';' )? otherlv_7= '}' )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:614:2: ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' ( (lv_contains_2_0= ruleTask ) )+ (otherlv_3= '@all' otherlv_4= ':' ( (lv_minRequirement_5_0= ruleMinRequirement ) ) otherlv_6= ';' )? otherlv_7= '}'
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:614:2: ( (lv_name_0_0= ruleEString ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:615:1: (lv_name_0_0= ruleEString )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:615:1: (lv_name_0_0= ruleEString )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:616:3: lv_name_0_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getTaskGroupAccess().getNameEStringParserRuleCall_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleTaskGroup1327);
            lv_name_0_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getTaskGroupRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleTaskGroup1339); 

                	newLeafNode(otherlv_1, grammarAccess.getTaskGroupAccess().getLeftCurlyBracketKeyword_1());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:636:1: ( (lv_contains_2_0= ruleTask ) )+
            int cnt8=0;
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( ((LA8_0>=RULE_STRING && LA8_0<=RULE_ID)) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:637:1: (lv_contains_2_0= ruleTask )
            	    {
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:637:1: (lv_contains_2_0= ruleTask )
            	    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:638:3: lv_contains_2_0= ruleTask
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getTaskGroupAccess().getContainsTaskParserRuleCall_2_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleTask_in_ruleTaskGroup1360);
            	    lv_contains_2_0=ruleTask();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getTaskGroupRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"contains",
            	            		lv_contains_2_0, 
            	            		"Task");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt8 >= 1 ) break loop8;
                        EarlyExitException eee =
                            new EarlyExitException(8, input);
                        throw eee;
                }
                cnt8++;
            } while (true);

            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:654:3: (otherlv_3= '@all' otherlv_4= ':' ( (lv_minRequirement_5_0= ruleMinRequirement ) ) otherlv_6= ';' )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==21) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:654:5: otherlv_3= '@all' otherlv_4= ':' ( (lv_minRequirement_5_0= ruleMinRequirement ) ) otherlv_6= ';'
                    {
                    otherlv_3=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleTaskGroup1374); 

                        	newLeafNode(otherlv_3, grammarAccess.getTaskGroupAccess().getAllKeyword_3_0());
                        
                    otherlv_4=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleTaskGroup1386); 

                        	newLeafNode(otherlv_4, grammarAccess.getTaskGroupAccess().getColonKeyword_3_1());
                        
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:662:1: ( (lv_minRequirement_5_0= ruleMinRequirement ) )
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:663:1: (lv_minRequirement_5_0= ruleMinRequirement )
                    {
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:663:1: (lv_minRequirement_5_0= ruleMinRequirement )
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:664:3: lv_minRequirement_5_0= ruleMinRequirement
                    {
                     
                    	        newCompositeNode(grammarAccess.getTaskGroupAccess().getMinRequirementMinRequirementParserRuleCall_3_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleMinRequirement_in_ruleTaskGroup1407);
                    lv_minRequirement_5_0=ruleMinRequirement();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getTaskGroupRule());
                    	        }
                           		set(
                           			current, 
                           			"minRequirement",
                            		lv_minRequirement_5_0, 
                            		"MinRequirement");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_6=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleTaskGroup1419); 

                        	newLeafNode(otherlv_6, grammarAccess.getTaskGroupAccess().getSemicolonKeyword_3_3());
                        

                    }
                    break;

            }

            otherlv_7=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleTaskGroup1433); 

                	newLeafNode(otherlv_7, grammarAccess.getTaskGroupAccess().getRightCurlyBracketKeyword_4());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTaskGroup"


    // $ANTLR start "entryRuleEInt"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:696:1: entryRuleEInt returns [String current=null] : iv_ruleEInt= ruleEInt EOF ;
    public final String entryRuleEInt() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEInt = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:697:2: (iv_ruleEInt= ruleEInt EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:698:2: iv_ruleEInt= ruleEInt EOF
            {
             newCompositeNode(grammarAccess.getEIntRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleEInt_in_entryRuleEInt1470);
            iv_ruleEInt=ruleEInt();

            state._fsp--;

             current =iv_ruleEInt.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEInt1481); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEInt"


    // $ANTLR start "ruleEInt"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:705:1: ruleEInt returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ;
    public final AntlrDatatypeRuleToken ruleEInt() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        Token this_INT_1=null;

         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:708:28: ( ( (kw= '-' )? this_INT_1= RULE_INT ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:709:1: ( (kw= '-' )? this_INT_1= RULE_INT )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:709:1: ( (kw= '-' )? this_INT_1= RULE_INT )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:709:2: (kw= '-' )? this_INT_1= RULE_INT
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:709:2: (kw= '-' )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==22) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:710:2: kw= '-'
                    {
                    kw=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleEInt1520); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getEIntAccess().getHyphenMinusKeyword_0()); 
                        

                    }
                    break;

            }

            this_INT_1=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleEInt1537); 

            		current.merge(this_INT_1);
                
             
                newLeafNode(this_INT_1, grammarAccess.getEIntAccess().getINTTerminalRuleCall_1()); 
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEInt"


    // $ANTLR start "entryRuleGrade"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:730:1: entryRuleGrade returns [EObject current=null] : iv_ruleGrade= ruleGrade EOF ;
    public final EObject entryRuleGrade() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGrade = null;


        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:731:2: (iv_ruleGrade= ruleGrade EOF )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:732:2: iv_ruleGrade= ruleGrade EOF
            {
             newCompositeNode(grammarAccess.getGradeRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleGrade_in_entryRuleGrade1582);
            iv_ruleGrade=ruleGrade();

            state._fsp--;

             current =iv_ruleGrade; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleGrade1592); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGrade"


    // $ANTLR start "ruleGrade"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:739:1: ruleGrade returns [EObject current=null] : ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= ':' ( (lv_requiredPoints_3_0= ruleEInt ) ) otherlv_4= ';' ) ;
    public final EObject ruleGrade() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_4=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        AntlrDatatypeRuleToken lv_requiredPoints_3_0 = null;


         enterRule(); 
            
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:742:28: ( ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= ':' ( (lv_requiredPoints_3_0= ruleEInt ) ) otherlv_4= ';' ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:743:1: ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= ':' ( (lv_requiredPoints_3_0= ruleEInt ) ) otherlv_4= ';' )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:743:1: ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= ':' ( (lv_requiredPoints_3_0= ruleEInt ) ) otherlv_4= ';' )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:743:2: () ( (lv_name_1_0= ruleEString ) ) otherlv_2= ':' ( (lv_requiredPoints_3_0= ruleEInt ) ) otherlv_4= ';'
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:743:2: ()
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:744:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getGradeAccess().getGradeAction_0(),
                        current);
                

            }

            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:749:2: ( (lv_name_1_0= ruleEString ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:750:1: (lv_name_1_0= ruleEString )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:750:1: (lv_name_1_0= ruleEString )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:751:3: lv_name_1_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getGradeAccess().getNameEStringParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleGrade1647);
            lv_name_1_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getGradeRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleGrade1659); 

                	newLeafNode(otherlv_2, grammarAccess.getGradeAccess().getColonKeyword_2());
                
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:771:1: ( (lv_requiredPoints_3_0= ruleEInt ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:772:1: (lv_requiredPoints_3_0= ruleEInt )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:772:1: (lv_requiredPoints_3_0= ruleEInt )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:773:3: lv_requiredPoints_3_0= ruleEInt
            {
             
            	        newCompositeNode(grammarAccess.getGradeAccess().getRequiredPointsEIntParserRuleCall_3_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEInt_in_ruleGrade1680);
            lv_requiredPoints_3_0=ruleEInt();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getGradeRule());
            	        }
                   		set(
                   			current, 
                   			"requiredPoints",
                    		lv_requiredPoints_3_0, 
                    		"EInt");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleGrade1692); 

                	newLeafNode(otherlv_4, grammarAccess.getGradeAccess().getSemicolonKeyword_4());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGrade"


    // $ANTLR start "ruleMinRequirementsType"
    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:801:1: ruleMinRequirementsType returns [Enumerator current=null] : ( (enumLiteral_0= '%' ) | (enumLiteral_1= 'point(s)' ) ) ;
    public final Enumerator ruleMinRequirementsType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;

         enterRule(); 
        try {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:803:28: ( ( (enumLiteral_0= '%' ) | (enumLiteral_1= 'point(s)' ) ) )
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:804:1: ( (enumLiteral_0= '%' ) | (enumLiteral_1= 'point(s)' ) )
            {
            // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:804:1: ( (enumLiteral_0= '%' ) | (enumLiteral_1= 'point(s)' ) )
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==23) ) {
                alt11=1;
            }
            else if ( (LA11_0==24) ) {
                alt11=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 11, 0, input);

                throw nvae;
            }
            switch (alt11) {
                case 1 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:804:2: (enumLiteral_0= '%' )
                    {
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:804:2: (enumLiteral_0= '%' )
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:804:4: enumLiteral_0= '%'
                    {
                    enumLiteral_0=(Token)match(input,23,FollowSets000.FOLLOW_23_in_ruleMinRequirementsType1742); 

                            current = grammarAccess.getMinRequirementsTypeAccess().getPercentageEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_0, grammarAccess.getMinRequirementsTypeAccess().getPercentageEnumLiteralDeclaration_0()); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:810:6: (enumLiteral_1= 'point(s)' )
                    {
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:810:6: (enumLiteral_1= 'point(s)' )
                    // ../at.ac.tuwien.big.me12.GSMLDsl/src-gen/at/ac/tuwien/big/me12/parser/antlr/internal/InternalGSMLDsl.g:810:8: enumLiteral_1= 'point(s)'
                    {
                    enumLiteral_1=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleMinRequirementsType1759); 

                            current = grammarAccess.getMinRequirementsTypeAccess().getAbsoluteEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_1, grammarAccess.getMinRequirementsTypeAccess().getAbsoluteEnumLiteralDeclaration_1()); 
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMinRequirementsType"

    // Delegated rules


 

    
    private static class FollowSets000 {
        public static final BitSet FOLLOW_ruleGradingSystem_in_entryRuleGradingSystem75 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleGradingSystem85 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleCourse_in_ruleGradingSystem140 = new BitSet(new long[]{0x0000000000000802L});
        public static final BitSet FOLLOW_ruleTask_in_entryRuleTask177 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleTask187 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleConcreteTask_in_ruleTask234 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleTaskGroup_in_ruleTask261 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleCourse_in_entryRuleCourse296 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleCourse306 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_11_in_ruleCourse352 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleCourse373 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleCourse385 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_ruleGrading_in_ruleCourse406 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleCourse419 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_entryRuleEString456 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEString467 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleEString507 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEString533 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleGrading_in_entryRuleGrading578 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleGrading588 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_14_in_ruleGrading634 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleGrading655 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleGrading667 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_ruleGradingScheme_in_ruleGrading688 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleTask_in_ruleGrading709 = new BitSet(new long[]{0x0000000000002030L});
        public static final BitSet FOLLOW_13_in_ruleGrading722 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleGradingScheme_in_entryRuleGradingScheme758 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleGradingScheme768 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_15_in_ruleGradingScheme814 = new BitSet(new long[]{0x0000000000010000L});
        public static final BitSet FOLLOW_16_in_ruleGradingScheme826 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleGradingScheme849 = new BitSet(new long[]{0x0000000000020000L});
        public static final BitSet FOLLOW_17_in_ruleGradingScheme861 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleGradingScheme873 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleGrade_in_ruleGradingScheme894 = new BitSet(new long[]{0x0000000000002030L});
        public static final BitSet FOLLOW_13_in_ruleGradingScheme907 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleMinRequirement_in_entryRuleMinRequirement943 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleMinRequirement953 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_18_in_ruleMinRequirement999 = new BitSet(new long[]{0x0000000000400040L});
        public static final BitSet FOLLOW_ruleEInt_in_ruleMinRequirement1020 = new BitSet(new long[]{0x0000000001800000L});
        public static final BitSet FOLLOW_ruleMinRequirementsType_in_ruleMinRequirement1041 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleConcreteTask_in_entryRuleConcreteTask1077 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleConcreteTask1087 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleConcreteTask1142 = new BitSet(new long[]{0x0000000000010000L});
        public static final BitSet FOLLOW_16_in_ruleConcreteTask1154 = new BitSet(new long[]{0x0000000000400040L});
        public static final BitSet FOLLOW_ruleEInt_in_ruleConcreteTask1175 = new BitSet(new long[]{0x0000000000020000L});
        public static final BitSet FOLLOW_17_in_ruleConcreteTask1187 = new BitSet(new long[]{0x0000000000180000L});
        public static final BitSet FOLLOW_19_in_ruleConcreteTask1200 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_ruleMinRequirement_in_ruleConcreteTask1221 = new BitSet(new long[]{0x0000000000100000L});
        public static final BitSet FOLLOW_20_in_ruleConcreteTask1235 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleTaskGroup_in_entryRuleTaskGroup1271 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleTaskGroup1281 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleTaskGroup1327 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleTaskGroup1339 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleTask_in_ruleTaskGroup1360 = new BitSet(new long[]{0x0000000000202030L});
        public static final BitSet FOLLOW_21_in_ruleTaskGroup1374 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_19_in_ruleTaskGroup1386 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_ruleMinRequirement_in_ruleTaskGroup1407 = new BitSet(new long[]{0x0000000000100000L});
        public static final BitSet FOLLOW_20_in_ruleTaskGroup1419 = new BitSet(new long[]{0x0000000000002000L});
        public static final BitSet FOLLOW_13_in_ruleTaskGroup1433 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEInt_in_entryRuleEInt1470 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEInt1481 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_22_in_ruleEInt1520 = new BitSet(new long[]{0x0000000000000040L});
        public static final BitSet FOLLOW_RULE_INT_in_ruleEInt1537 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleGrade_in_entryRuleGrade1582 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleGrade1592 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleGrade1647 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_19_in_ruleGrade1659 = new BitSet(new long[]{0x0000000000400040L});
        public static final BitSet FOLLOW_ruleEInt_in_ruleGrade1680 = new BitSet(new long[]{0x0000000000100000L});
        public static final BitSet FOLLOW_20_in_ruleGrade1692 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_23_in_ruleMinRequirementsType1742 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_24_in_ruleMinRequirementsType1759 = new BitSet(new long[]{0x0000000000000002L});
    }


}